19 DAC
19 DAC原理Digital-to-Analog Converter 数模转换器
1 💫 DAC 简介

DAC (Digital-to-Analog Converter)数模转换器,是指将离散的0 1数字信号 转换为 模拟信号的器件
-
F103C8T6 没有内置 DAC, up在扬声器模块下加了一个外置DAC
-
是12 位精度 所以DAC的输出范围在(0 ~ 4095) 输出精度在(1/4096)
-
有两个用途:输出波形 和 输出固定电压
1 🔄 DA转换原理
我们怎么样通过01电平控制开关 从而实现 任意波形 的输出呢?我们可以这样
-
将电源和地之间的电压通过
n个电阻将电压分为n等分 -
然后在每个节点 添加一个开关
-
需要哪个电压的时候就让这个开关导通 从而输出 对应电压
- 然后我们再通过 开关的快速切换从而输出
阶梯状波形 - 这时候我们再简单通过电容滤波一下 就可以得到我们想要的模拟信号了
这就是DA转换的思路 但用这种方式 我们需要n个电阻和 n个开关去实现
- 如果要将VCC分为 10等分 就需要 10个开关
- 如果要分为 4096等分 则需要 4096个开关
很显然这太浪费MOS管了 所以我们可以将它改进一下 首先将这个开关改进
通过两个MOS管 我们就可以形成一个 单刀双掷的开关
接着我们再改进一下这个这个电路的连接
-
我们将一端接地 另一端作为输出
-
再通过阻值为 2R的电阻连接每个节点 构成一个
T型的电阻网络 -
然后再将每个2R的一端接到我们改进的单刀双掷开关
我们先将他简化为 3个开关控制的情况
-
再从左边开始 先看到 第一个开关对应的部分
-
将后面的电路看为负载 将后面的负载断开
-
此时我们就可以对这一小部分进行单独的分析
这个黑盒子的 输出电压
- 很显然两个2R分压 中间点的电压就是 二分之一个VCC
- 因为此时负载断开 我们也可以叫它
开路电压
然后我们再把黑盒子里面的电 关掉
- 此时VCC和GND都是 0v 那么我么从输出点看进去很显然 是两个2R电阻的并联
- 整体的阻值就为R 我们也可以叫它
等效内阻
那么这时候我们就可以把这个黑盒子等效为 一个二分之一VCC的电压源串联一个电阻R
这样的等效方式在线性电路里面很常用 刚才的操作也可以总结为两步:
- 去负载求开路电压
- 独立源置零求等效内阻
-
接着我们将等效后的部分 放回原来的电路 接着我们再将它 与第二个开关对应的部分进行戴维南等效
-
此时我们得到的等效电路为 四分之一VCC电压源 串联一个电阻R
-
我们再将它放回原来的电路 很显然 如果再进行戴维南等效的话 最后的输出电压就是 8分之VCC
通过这几次等效后 我们就可以发现 规律 越左边等效的次数越多 每次等效电压源就变为一半
对于3个开关对应的 3位 最低位为1输出的是 8分之一
- 也就是 2的3次方分之2的0次方
- 分母对应的 就是位数 也就是多少bit的精度
- 分子则对应 具体的输出值
我们再将它拓展到12位
- 此时分母也就是 2的12次方 分子最低位为1其他为0 也就对应 2的0次方
- 所以最终的输出值是 4096分之一的VCC
所以通过这样的方式 我们只需要 12个改进后的开关 也就是24个MOS管就可以实现12位的精度
这也就是STM32内部DAC的硬件原理 而这个电路也有它专属的名字 叫做R2R T型电阻网络
2 🌐 DAC外设结构
我们从信号的 触发 --> 生成 --> 输出 这个流程来分析DAC的结构
- 信号触发
-
TIM2,TIM4,TIM5,TIM6,TIM7,TIM8 定时器触发
-
EXTI9外部中断线触发
-
软件触发
- 信号生成
-
DAC受
DOR寄存器直接控制的,但是数据并不是直接传入DOR的,需要先传入DHR之后在间接地传给DOR寄存器-
如果没有选择硬件触发(TENx=0),在一个APB1周期后传入
DOR -
如果选择硬件触发(TENx=1),则在3个APB1周期后传入
DOR
-
-
一旦数据装入
DOR寄存器,在经过时间Testting(大约3us) 之后,输出即有效 -
LFSRx噪声波形模块 线性移位寄存器,生成伪随机噪声数字序列 -
trianglex三角波模块,自动递增 / 递减数字值;MAMPx[3:0] 设置三角波峰值幅度
- 信号输出
-
DAC输出电压 = VREF x (DOR / 4095)
- DAC电压输出范围为0到参考电压VREF+
这里的 DA转换器 也就是刚刚讲到的R2RT型电阻网络 上面的 DOR 就是控制这12个开关的寄存器
根据上面可知,数据先写入DHR寄存器,然而实际上DHR一共有3个寄存器对应三种数据格式(不通过移位, 减小CPU负担)
-
8位数据右对齐
-
12位数据左对齐
-
12位数据右对齐